package com.binhthuan.catechist.client.dto;

import java.util.HashSet;
import java.util.Set;

import name.pehl.piriti.client.json.Json;
import name.pehl.piriti.client.json.JsonReader;
import name.pehl.piriti.client.json.JsonWriter;

import com.google.gwt.core.client.GWT;

/**
 * @author Giang Đinh - Tình trạng của học viên, tương ứng với bảng
 *         <b>bang_diem_lop</b> trong cơ sở dữ liệu.
 */
public class Transcript {

    public interface TranscriptReader extends JsonReader<Transcript> {
    }
    public interface TranscriptWriter extends JsonWriter<Transcript> {
    }

    public static TranscriptReader READER = GWT.create(TranscriptReader.class);
    public static TranscriptWriter WRITER = GWT.create(TranscriptWriter.class);

    /**
     * Mã bảng điểm.
     */
    @Json
    private Integer id;
    
    /**
     * Lớp.
     */
    @Json
    private DoctrineClass doctrineClass;
    
    /**
     * Ngày kiễm tra.
     */
    @Json
    private Date testDay;
    
    /**
     * Loại điểm.
     */
    @Json
    private MarkType markType;
    
    /**
     * Điểm học viên.
     */
    @Json
    private Set<Mark> marks;

    public Transcript() {
        marks = new HashSet<Mark>(0);
    }

    /**
     * Lấy mã bảng điểm.
     * @return Mã bảng điểm.
     */
    public Integer getId() {
        return id;
    }

    /**
     * Gán mã bảng điểm.
     * @param id
     *            Mã bảng điểm.
     */
    public void setId(Integer id) {
        this.id = id;
    }

    /**
     * Lấy lớp.
     * @return Lớp.
     */
    public DoctrineClass getDoctrineClass() {
        return doctrineClass;
    }

    /**
     * Gán lớp.
     * @param doctrineClass
     *            Lớp.
     */
    public void setDoctrineClass(DoctrineClass doctrineClass) {
        this.doctrineClass = doctrineClass;
    }

    /**
     * Lấy ngày kiểm tra.
     * @return Ngày kiểm tra.
     */
    public Date getTestDay() {
        return testDay;
    }

    /**
     * Gán ngày kiểm tra.
     * @param testDay
     *            Ngày kiểm tra.
     */
    public void setTestDay(Date testDay) {
        this.testDay = testDay;
    }

    /**
     * Lấy loại điểm.
     * @return Loại điểm.
     */
    public MarkType getMarkType() {
        return markType;
    }

    /**
     * Gán loại điểm.
     * @param markType
     *            Loại điểm.
     */
    public void setMarkType(MarkType markType) {
        this.markType = markType;
    }

    /**
     * Lấy điểm học viên.
     * @return Điểm học viên.
     */
    public Set<Mark> getMarks() {
        return marks;
    }

    /**
     * Gán điểm học viên.
     * @param marks
     *            Điểm học viên.
     */
    public void setMarks(Set<Mark> marks) {
        this.marks = marks;
    }
}
